/*                          UX-Framework                               
 *                                                                 
 *  iZE Co.,Ltd. Copyright 2009 All rights reserved.          
 *  This file is distributed under the terms of the GNU Lesser 
 *  General Public License, described in file LICENSE.                                     
 */
package jp.ize.ux;

// {{{ class UXRange
/** 
 * UXRangeクラス。<br>
 * 値の範囲を表現するクラス。<br>
 *
 * @author		iZE Co., Ltd.<br>
 * @version		$Id: UXRange.hx 20 2009-02-04 08:23:19Z yimai.v $<br>
 */
class UXRange
{
	// {{{ public var min(default, default) : Float;
	/**
	 * 最小値
	 */
	public var min(default, default) : Float;
	// }}}
	// {{{ public var max(default, default) : Float;
	/**
	 * 最大値
	 */
	public var max(default, default) : Float;
	// }}}
	// {{{ public function new()
	/**
	 * コンストラクタ.
	 * デフォルトの最小値は-1.7976931348623158e+308、最大値は1.7976931348623158e+308.
	 */
	public function new( ?min: Float, ?max: Float )
	{
		if( min == null ) {
			this.min = 1.7976931348623158e+308;
		}
		if( max == null ) {
			this.max = -1.7976931348623158e+308;
		}
	}
	// }}}
	// {{{ public function spread( v : Float ) : Void
	/**
	 * 値vによって最大値もしくは最大値を広げます。
	 * 値vが最大値より小さく、最小値より大きければ、この関数は何もしません。
	 */
	public function spread( v : Float ) : Void
	{
		if( v < this.min ) { this.min = v; }
		if( v > this.max ) { this.max = v; }
	}
	// }}}
	// {{{ public function merge( r : UXRange ) : Void
	/**
	 * 与えられた範囲の最小値と自身の最小値の小さい方、与えられた範囲の最大値と自身の最大値の大きい方を新しく自身の範囲とします。
	 */
	public function merge( r : UXRange ) : Void
	{
		this.min = Math.min( this.min, r.min );
		this.max = Math.max( this.max, r.max );
	}
	// }}}
}
// }}}
